// 传入一个二维数组[['',''],['']]合并成[{name:'',id:1},{name:'',id:2},{name:'',id:3}]
export function listFlot(arr) {
	const flatArr = arr.flat();

	// 2. 加上 id 和 name
	const result = flatArr.map((item, index) => ({
		name: item,
		id: index + 1
	}));
	return result
}
// 传入一个二维数组[{name:'',id:1},{name:'',id:2},{name:'',id:3}]合并成['','','']

export function listMap(arr) {
	const nameList = arr.map(item => item.name);
	return nameList
}

/**
 * 安全地转换大数字，避免精度丢失（适用于微信小程序）
 * @param {string|number} value - 要转换的值
 * @returns {string|number} - 如果超过安全整数范围则返回字符串，否则返回数字
 */
export function safeBigIntToNumber(value) {
	if (!value && value !== 0) return value;
	
	const strValue = String(value);
	
	// 检查是否是18位或以上的数字字符串
	if (/^\d{18,}$/.test(strValue)) {
		console.warn('18位以上数字，直接返回字符串避免精度丢失:', strValue);
		return strValue;
	}
	
	const numValue = Number(strValue);
	
	// 检查是否超过最大安全整数（9007199254740991）
	if (numValue > Number.MAX_SAFE_INTEGER || numValue < Number.MIN_SAFE_INTEGER) {
		console.warn('Number is beyond safe integer range, returning as string:', strValue);
		return strValue;
	}
	
	// 检查转换后的数字是否与原字符串一致（避免科学记数法等问题）
	if (String(numValue) !== strValue) {
		console.warn('Number conversion may lose precision, returning as string:', strValue);
		return strValue;
	}
	
	return numValue;
}

/**
 * 测试大数字处理函数（开发环境使用）
 */
export function testBigNumberHandling() {
	console.log('=== 大数字处理测试 ===');
	
	// 测试用例
	const testCases = [
		'123456789012345678', // 18位数字
		'12345678901234567',  // 17位数字
		'123456789012345',    // 15位数字
		123456789012345,      // 数字类型
		'123',                // 小数字
		0,                    // 零
		'',                   // 空字符串
		null,                 // null
		undefined             // undefined
	];
	
	testCases.forEach(testCase => {
		const result = safeBigIntToNumber(testCase);
		console.log(`输入: ${testCase} (${typeof testCase}) => 输出: ${result} (${typeof result})`);
	});
	
	console.log('=== 测试结束 ===');
}

/**
 * 处理对象中的大数字字段，将超过安全范围的数字转换为字符串
 * @param {any} obj - 要处理的对象或数组
 * @param {string[]} bigIntFields - 需要处理的大数字字段名数组
 * @returns {any} - 处理后的对象
 */
export function processBigIntFields(obj, bigIntFields = ['schoolId', 'classId', 'teacherId', 'studentId']) {
	if (!obj) return obj;
	
	// 如果是数组，递归处理每个元素
	if (Array.isArray(obj)) {
		return obj.map(item => processBigIntFields(item, bigIntFields));
	}
	
	// 如果不是对象，直接返回
	if (typeof obj !== 'object') {
		return obj;
	}
	
	// 创建新对象避免修改原对象
	const processedObj = { ...obj };
	
	// 处理指定的大数字字段
	bigIntFields.forEach(field => {
		if (processedObj.hasOwnProperty(field) && processedObj[field] != null) {
			const value = processedObj[field];
			const strValue = String(value);
			
			// 检查是否是18位或以上的数字
			if (/^\d{18,}$/.test(strValue)) {
				console.log(`处理大数字字段 ${field}: ${value} -> ${strValue}`);
				processedObj[field] = strValue;
			}
		}
	});
	
	// 递归处理嵌套对象
	Object.keys(processedObj).forEach(key => {
		if (typeof processedObj[key] === 'object' && processedObj[key] !== null) {
			processedObj[key] = processBigIntFields(processedObj[key], bigIntFields);
		}
	});
	
	return processedObj;
}

/**
 * 测试API返回数据的大数字处理（开发环境使用）
 */
export function testApiDataProcessing() {
	console.log('=== API数据大数字处理测试 ===');
	
	// 模拟API返回的数据
	const mockApiData = [
		{
			id: 1, 
			classId: 205270295987228670, 
			className: "三年一班", 
			schoolId: 205253192831864830, 
			studentCount: 1
		},
		{
			id: 2, 
			classId: 205528182575730700, 
			className: "三年二班", 
			schoolId: 205253192831864830, 
			studentCount: 1
		}
	];
	
	console.log('原始数据:', mockApiData);
	
	// 处理数据
	const processedData = processBigIntFields(mockApiData);
	console.log('处理后数据:', processedData);
	
	// 验证处理结果
	processedData.forEach((item, index) => {
		console.log(`第${index + 1}条记录:`);
		console.log(`  classId: ${item.classId} (${typeof item.classId})`);
		console.log(`  schoolId: ${item.schoolId} (${typeof item.schoolId})`);
	});
	
	console.log('=== 测试结束 ===');
}